Sprawdzenie aktualnego skina [WinXP] ;)
mitring
Przy pisaniu mojej pracy dyplomowej chcialem, aby program sprawdzil z jakim systemem operacyjnym ma do czynienia i jak jest to XP to musi sprawdzic jaki skin jest aktywny ;P
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComObj, ComCtrls, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
Label1: TLabel;
TrackBar1: TTrackBar;
Label2: TLabel;
Image1: TImage;
procedure SpeedButton1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
function GetXPTheme(): string;
public
{ Public declarations }
end;
var
Form1: TForm1;
IsThemeActive : function: BOOL cdecl stdcall;
GetCurrentThemeName: function(pszThemeFileName: PWideChar;
cchMaxNameChars: Integer;
pszColorBuff: PWideChar;
cchMaxColorChars: Integer;
pszSizeBuff: PWideChar;
cchMaxSizeChars: Integer): THandle cdecl stdcall;
implementation
{$R *.dfm}
{$R WindowsXP.res}
{ Sprawdzenie skina i wyprowadzenie nazwy }
function TForm1.GetXPTheme: string;
var
Theme : THandle;
FileName, ColorScheme, SizeName: WideString;
begin
Theme := 0;
Result := 'xpNone';
try
Theme := LoadLibrary('uxTheme.dll');
if Theme > 0 then begin
IsThemeActive := GetProcAddress(Theme, 'IsThemeActive');
if Assigned(IsThemeActive) then
if IsThemeActive then begin
GetCurrentThemeName := GetProcAddress(Theme, 'GetCurrentThemeName');
if Assigned(GetCurrentThemeName) then begin
SetLength(FileName , 255);
SetLength(ColorScheme, 255);
SetLength(SizeName , 255);
OleCheck(GetCurrentThemeName(PWideChar(FileName), 255, PWideChar(ColorScheme), 255, PWideChar(SizeName), 255));
if (PWideChar(ColorScheme) = 'NormalColor') then
Result := 'xpBlue'
else if (PWideChar(ColorScheme) = 'HomeStead') then
Result := 'xpOlive'
else if (PWideChar(ColorScheme) = 'Metallic') then
Result := 'xpSilver'
else
Result := 'xpNone';
end;
end;
end;
finally
if Theme <> 0 then FreeLibrary(Theme);
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Label1.Caption := GetXPTheme; // wyswietla nazwe Skina np. xpBlue
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Form1.AlphaBlendValue := TrackBar1.Position;
Caption := ':: CheckSkin :: Blend: ' + IntToStr(TrackBar1.Position);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.AlphaBlend := True;
Form1.AlphaBlendValue := TrackBar1.Position;
Caption := ':: CheckSkin :: Blend: ' + IntToStr(TrackBar1.Position);
end;
end.
Mam nadzieje, ze komus moze sie to przyda ;)
Zrodelko ;) jak nie dziala link na 4P to z innego serwera ;)
Przykladzik
hmm a nie wie ktoś, jak wybierać style z poziomu aplikacji?? I chodzi mi zwłaszcza o te niemicrosoftowe
co za problem :). mozna ten kawalek:
(...)
Result := 'xpNone';
zastapic tym:
(...)
Result := PWideChar(ColorScheme);
a nawet sprawdzic jak sie zwie xpNone i tez jako warunek dodac, ale mi sie nie chce, bo szukam czegos innego :P
Bralem pod uwage tylko dostepne domyslnie schemaciki ;)
No nie do końca ;P, bo co jeśli doinstaluje dodatkowy schemat? Mogę dać tylko 5 :)